电子商务网站开发教程

1. PHP 简介和历史

1.1 PHP 简介

PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,特别适用于Web开发。PHP脚本在服务器端执行,生成动态网页内容。

1.2 PHP 历史

PHP 最初由 Rasmus Lerdorf 于1994年创建,作为个人主页工具。经过多次版本迭代,PHP 5 和 PHP 7 带来了显著的性能提升和功能增强。

2. 环境搭建

2.1 XAMPP 安装

XAMPP 是一个集成了 Apache、MySQL、PHP 和 Perl 的开发环境。

  1. 下载 XAMPP 安装包。
  2. 运行安装程序,选择安装路径。
  3. 启动 XAMPP 控制面板,启动 Apache 和 MySQL 服务。

2.2 WAMP 安装

WAMP 是 Windows 下的 Apache + MySQL + PHP 环境。

  1. 下载 WAMP 安装包。
  2. 运行安装程序,选择安装路径。
  3. 启动 WAMP 服务,确保 Apache 和 MySQL 正常运行。

3. 基本语法和数据类型

3.1 基本语法

PHP 脚本以 <?php 开始,以 ?> 结束。

<?php
echo "Hello, World!";
?>

3.2 数据类型

PHP 支持多种数据类型,包括整型、浮点型、字符串、布尔型、数组、对象等。

$intVar = 10;
$floatVar = 10.5;
$stringVar = "Hello";
$boolVar = true;

4. 变量和常量

4.1 变量

变量以 $ 符号开头,赋值使用 =。

$name = "John";
$age = 25;

4.2 常量

常量使用 define() 函数定义,一旦定义不能修改。

define("PI", 3.14159);
echo PI;

5. 运算符和表达式

5.1 运算符

PHP 支持算术运算符、比较运算符、逻辑运算符等。

$sum = 10 + 20;
$isEqual = ($sum == 30);

5.2 表达式

表达式是 PHP 代码的基本构建块,可以是变量、常量、运算符组合等。

$result = $sum * 2;

6. 条件语句

6.1 if-else 语句

根据条件执行不同的代码块。

if ($age >= 18) {
    echo "You are an adult.";
} else {
    echo "You are a minor.";
}

6.2 switch 语句

多分支选择结构。

switch ($day) {
    case "Monday":
        echo "Today is Monday.";
        break;
    case "Tuesday":
        echo "Today is Tuesday.";
        break;
    default:
        echo "It's another day.";
}

7. 循环

7.1 for 循环

重复执行指定次数的代码块。

for ($i = 0; $i < 5; $i++) {
    echo "Number: $i\n";
}

7.2 while 循环

在条件为真时重复执行代码块。

$i = 0;
while ($i < 5) {
    echo "Number: $i\n";
    $i++;
}

7.3 do-while 循环

先执行一次代码块,再根据条件决定是否重复执行。

$i = 0;
do {
    echo "Number: $i\n";
    $i++;
} while ($i < 5);

7.4 foreach 循环

遍历数组或对象的每个元素。

$colors = array("red", "green", "blue");
foreach ($colors as $color) {
    echo "Color: $color\n";
}

8. 跳转语句

8.1 break 语句

跳出循环或 switch 语句。

for ($i = 0; $i < 10; $i++) {
    if ($i == 5) {
        break;
    }
    echo "Number: $i\n";
}

8.2 continue 语句

跳过当前循环迭代,继续下一次迭代。

for ($i = 0; $i < 10; $i++) {
    if ($i % 2 == 0) {
        continue;
    }
    echo "Odd Number: $i\n";
}

9. 函数定义和调用

9.1 函数定义

使用 function 关键字定义函数。

function greet($name) {
    echo "Hello, $name!";
}

9.2 函数调用

调用函数并传递参数。

greet("Alice");

10. 参数和返回值

10.1 参数

函数可以接受多个参数。

function add($a, $b) {
    return $a + $b;
}

10.2 返回值

函数可以返回一个值。

$sum = add(10, 20);
echo "Sum: $sum";

11. 变量作用域

11.1 全局作用域

全局变量在函数外部定义,可以在任何地方访问。

$globalVar = "Global";

function test() {
    global $globalVar;
    echo $globalVar;
}

11.2 局部作用域

局部变量在函数内部定义,只能在函数内部访问。

function test() {
    $localVar = "Local";
    echo $localVar;
}

12. 匿名函数和闭包

12.1 匿名函数

没有名字的函数,通常用作回调函数。

$greet = function($name) {
    echo "Hello, $name!";
};

$greet("Bob");

12.2 闭包

闭包是匿名函数的一种,可以访问其定义范围内的变量。

$message = "Hello";
$greet = function($name) use ($message) {
    echo "$message, $name!";
};

$greet("Charlie");

13. 索引数组和关联数组

13.1 索引数组

使用数字索引的数组。

$fruits = array("apple", "banana", "cherry");
echo $fruits[0]; // 输出 "apple"

13.2 关联数组

使用字符串键的数组。

$person = array("name" => "John", "age" => 25);
echo $person["name"]; // 输出 "John"

14. 多维数组

14.1 多维数组

数组中的元素也是数组。

$matrix = array(
    array(1, 2, 3),
    array(4, 5, 6),
    array(7, 8, 9)
);

echo $matrix[1][2]; // 输出 6

15. 数组操作函数

15.1 常用数组函数

PHP 提供了丰富的数组操作函数。

$numbers = array(3, 1, 4, 1, 5, 9);
sort($numbers);
print_r($numbers); // 输出排序后的数组

16. 字符串函数

16.1 常用字符串函数

PHP 提供了多种字符串操作函数。

$text = "Hello, World!";
echo strlen($text); // 输出 13
echo str_replace("World", "PHP", $text); // 输出 "Hello, PHP!"

17. 正则表达式

17.1 正则表达式基础

正则表达式用于匹配字符串模式。

$pattern = "/php/i";
$text = "PHP is fun!";
if (preg_match($pattern, $text)) {
    echo "Match found!";
}

18. 类和对象

18.1 类定义

使用 class 关键字定义类。

class Person {
    public $name;
    public $age;

    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }

    public function greet() {
        echo "Hello, my name is $this->name and I am $this->age years old.";
    }
}

18.2 对象实例化

使用 new 关键字创建对象。

$person = new Person("Alice", 30);
$person->greet();

19. 继承和多态

19.1 继承

子类继承父类的属性和方法。

class Student extends Person {
    public $studentId;

    public function __construct($name, $age, $studentId) {
        parent::__construct($name, $age);
        $this->studentId = $studentId;
    }

    public function study() {
        echo "$this->name is studying.";
    }
}

19.2 多态

不同类的对象调用相同方法时表现不同。

$student = new Student("Bob", 20, "S12345");
$student->greet(); // 输出 "Hello, my name is Bob and I am 20 years old."
$student->study(); // 输出 "Bob is studying."

20. 接口和抽象类

20.1 接口

定义一组方法,实现类必须实现这些方法。

interface Greetable {
    public function greet();
}

class Person implements Greetable {
    public $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function greet() {
        echo "Hello, my name is $this->name.";
    }
}

20.2 抽象类

不能实例化,只能被继承。

abstract class Animal {
    abstract public function makeSound();
}

class Dog extends Animal {
    public function makeSound() {
        echo "Woof!";
    }
}

21. 命名空间

21.1 命名空间定义

避免类名冲突。

namespace MyApp;

class MyClass {
    public function sayHello() {
        echo "Hello from MyApp!";
    }
}

21.2 命名空间使用

使用 use 关键字引入命名空间。

use MyApp\MyClass;

$obj = new MyClass();
$obj->sayHello();

22. 特性 (Traits)

22.1 Traits 定义

Traits 是一种代码复用机制。

trait Logger {
    public function log($message) {
        echo "Log: $message";
    }
}

class MyClass {
    use Logger;

    public function doSomething() {
        $this->log("Something happened.");
    }
}

22.2 Traits 使用

在类中使用 use 关键字引入 Trait。

$obj = new MyClass();
$obj->doSomething(); // 输出 "Log: Something happened."

23. 异常处理

23.1 异常处理基础

使用 try-catch 块处理异常。

try {
    throw new Exception("Something went wrong.");
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}

23.2 自定义异常

定义自己的异常类。

class MyException extends Exception {
    public function __construct($message) {
        parent::__construct($message);
    }
}

try {
    throw new MyException("Custom error.");
} catch (MyException $e) {
    echo "Custom Error: " . $e->getMessage();
}

24. 错误报告和日志

24.1 错误报告

设置错误报告级别。

error_reporting(E_ALL);
ini_set('display_errors', 1);

24.2 日志记录

使用 error_log 记录日志。

error_log("An error occurred.", 3, "/path/to/error.log");

25. 文件读写

25.1 文件读取

使用 file_get_contents 读取文件内容。

$content = file_get_contents("example.txt");
echo $content;

25.2 文件写入

使用 file_put_contents 写入文件内容。

file_put_contents("example.txt", "Hello, World!");

26. 目录操作

26.1 创建目录

使用 mkdir 创建目录。

mkdir("new_directory");

26.2 删除目录

使用 rmdir 删除目录。

rmdir("new_directory");

27. 文件上传处理

27.1 文件上传表单

创建文件上传表单。

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload File" name="submit">
</form>

27.2 文件上传处理

处理上传的文件。

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $targetDir = "uploads/";
    $targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
    move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile);
    echo "File uploaded successfully.";
}

28. MySQL 基础

28.1 连接数据库

使用 mysqli 连接 MySQL 数据库。

$conn = new mysqli("localhost", "username", "password", "database");
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

28.2 执行查询

执行 SQL 查询。

$sql = "SELECT * FROM users";
$result = $conn->query($sql);
while ($row = $result->fetch_assoc()) {
    echo "ID: " . $row["id"] . " - Name: " . $row["name"] . "<br>";
}

29. PDO 数据库抽象层

29.1 PDO 连接

使用 PDO 连接数据库。

$dsn = "mysql:host=localhost;dbname=database";
$username = "username";
$password = "password";

try {
    $pdo = new PDO($dsn, $username, $password);
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

29.2 执行查询

使用 PDO 执行查询。

$sql = "SELECT * FROM users";
$stmt = $pdo->query($sql);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo "ID: " . $row["id"] . " - Name: " . $row["name"] . "<br>";
}